﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System;
using System.IO;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

  using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
namespace Maszyna
{
  

    //________________________________MOJE KLASY_______________________________________________________________________________
    class rejestr //klasa rejestr
    {
        int wartosc;		//wartość przechowywana przez rejest
        public rejestr()		//konstuktor używany w pierwszej fazie programu do zerowania rejestrów
        {
            wartosc = 0;
        }
        ~rejestr() { }   //destruktor klasy rejestr

        public void store(int r)   //metoda store nadająca nową wartość rejestu
        {
            wartosc = r;
        }
        public int load()			// metoda load zwraca wartość rejestru
        {
            return wartosc;
        }
        public void add(int b) //metoda add odpowada za działanie dodawania
        {
            wartosc += b;
        }
        public void sub(int b) //metoda add odpowada za działanie odejmowania
        {
            wartosc -= b;
        }
        public void div(int b) //metoda add odpowada za działanie dzielenia
        {
            wartosc /= b;
        }
        public void mult(int b) //metoda add odpowada za działanie dodawania
        {
            wartosc *= b;
        }
    };

    class tasma		//klasa tasma
    {
        protected  //wartość jest chroniona, a nie prywatna, żeby umożliwić dziedziczenie
        int wartosc; // wartość taśmy
        public
                tasma() { } //konstruktor I
        public tasma(int w)  //konstruktor II
        {
            wartosc = w;
        }
        ~tasma() // destruktor
        {

        }
        public virtual int read() // metoda wirtualna odpowiedzialna za odczyt z taśmy
        {
            return wartosc;
        }
        public virtual void write(int w) // metoda wirtualna odpowiedzialna za zapis na taśmie
        {
            wartosc = w;

        }
    };

    class tasma_wejsciowa : tasma //klasa tasma wejsciowa dziedziczy po klasie tasma
    {
        public tasma_wejsciowa(int wartosc) : base(wartosc) { } //konstuktor przesłaninający ten w klasie bazowej
        public tasma_wejsciowa() : base() { }						  //
        ~tasma_wejsciowa()			//destruktor
        {

        }
        public override int read()  //metoda przesłaniająca metodę read z klasy bazowej
        {
            return wartosc;
        }
    };

    class tasma_wyjsciowa : tasma  //klasa tasma wejsciowa dziedziczy po klasie tasma
    {
        public
                tasma_wyjsciowa(int w)
            : base(w) { }//konstuktor przesłaninający ten w klasie bazowej
        public tasma_wyjsciowa()
            : base(0)
        { }
        ~tasma_wyjsciowa() //destruktor
        {

        }
        public override void write(int w)  //metoda przesłaniająca metodę write z klasy bazowej
        {
            wartosc = w;

        }
    };
    //___________________________________________________________________________________________________________________________________


    namespace Maszyna
    {
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }

}
